package powerdev.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Collection;
import java.sql.Date;

import powerdev.excepcion.DAOExcepcion;
import powerdev.modelo.Cancha;
//import powerdev.modelo.Evento;
//import powerdev.modelo.Tipo;
import powerdev.util.ConexionBD;
import powerdev.modelo.Local;
import powerdev.modelo.Tipo;


public class CanchaDAO extends BaseDAO{

	
	
	public Collection<Cancha> listar(int coDistrito, Date feAtencionDia, Date feAtencionDia2, Time feHoraIni, Time HoraFin) throws DAOExcepcion {
		System.out.println("CanchaDAO: listar()");
		Collection<Cancha> c = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select c.co_Cancha, c.no_Canacha, c.tx_Caracteristicas, c.no_Foto, c.co_Local, c.co_Tipo, " +
					"t.no_Tipo, l.no_Local, l.tx_Direccion, l.tx_GoogleMaps, l.nu_Telefono, d.no_Distrito, " +
					"di.fe_AtencionDia, di.fe_HoraIni, di.fe_HoraFin " +
					"from cancha c Inner Join Localx l on (l.co_Local=c.co_Local) " +
					"Inner Join Distrito d on (d.co_Distrito=l.co_Distrito) " +
					"Inner Join Disponibilidad di on (di.co_Cancha=c.co_Cancha) " +
					"Inner Join Tipo t on (t.co_Tipo=c.co_Tipo) " +
					"where d.co_Distrito=? and di.fe_AtencionDia >=? and di.fe_AtencionDia <=? " +
					"and di.fe_HoraIni>= ? and di.fe_HoraFin<=? ";
			stmt = con.prepareStatement(query);
			stmt = con.prepareStatement(query);
			stmt.setInt(1, coDistrito );
			stmt.setDate(2, feAtencionDia );
			stmt.setDate(3, feAtencionDia2 );
			stmt.setTime(4, feHoraIni );
			stmt.setTime(5, HoraFin );
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancha vo = new Cancha();
				
				vo.setCo_Cancha(rs.getInt("co_Cancha"));
				vo.setNo_Canacha(rs.getString("no_Canacha"));
				vo.setTx_Caracteristicas(rs.getString("tx_Caracteristicas"));
				vo.setNo_Foto(rs.getString("no_Foto"));
				
				// captura para LOCAL
				Local lo = new Local();
				lo.setNo_Local(rs.getString("no_Local"));
				lo.setTx_Direccion(rs.getString("tx_Direccion"));
				lo.setTx_GoogleMaps(rs.getString("tx_GoogleMaps"));
				lo.setNu_Telefono(rs.getString("nu_Telefono"));
				vo.setoLocal(lo);
				
				// captura para TIPO
				Tipo td = new Tipo();
				td.setNo_Tipo(rs.getString("no_Tipo"));
				vo.setoTipo(td);
								
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public Collection<Cancha> buscarCancha(String no_Canacha, int co_Local) throws DAOExcepcion {
		System.out.println("CanchaDAO: buscarCancha(String no_Canacha, int co_Local)");
		String query = "SELECT co_Cancha, no_Canacha, tx_Caracteristicas, no_Foto, co_Local, co_Tipo FROM Cancha WHERE no_Canacha= ? and co_Local=?";
		Collection<Cancha> lista = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, no_Canacha);
			stmt.setInt(2, co_Local);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancha vo = new Cancha();
				vo.setCo_Cancha(rs.getInt("co_Cancha"));
				vo.setNo_Canacha(rs.getString("no_Canacha"));
				vo.setTx_Caracteristicas(rs.getString("no_Canacha"));
				vo.setNo_Foto(rs.getString("no_Foto"));
				//vo.setoLocal(rs.getoLocal)
				//vo.setco_Tipo(rs.getInt("co_Tipo"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}

	public int UltimoCodCancha() throws DAOExcepcion {
		System.out.println("CanchaDAO: UltimoCodCancha()");
		String query = "select co_Cancha from cancha order by co_Cancha desc limit 1";
		Collection<Cancha> lista = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		int ultimo = 0;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				
				ultimo=rs.getInt("co_Cancha");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return ultimo;
	}
	
	public void insertarCancha(Cancha vo, int co_Local, int co_Tipo) throws DAOExcepcion {
		System.out.println("CanchaDAO: insertar(Cancha vo)");
		String query = "INSERT INTO Cancha(no_Canacha, tx_Caracteristicas, no_Foto, co_Local, co_Tipo) VALUES (?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNo_Canacha());
			stmt.setString(2, vo.getTx_Caracteristicas());
			stmt.setString(3, vo.getNo_Foto());
			stmt.setInt(4, co_Local);
			stmt.setInt(5, co_Tipo);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Collection<Cancha> listarCancha(int co_Local) throws DAOExcepcion {
		System.out.println("CanchaDAO: buscarCancha(int co_Local)");
		String query = "SELECT co_Cancha, no_Canacha, co_Local FROM Cancha";
		Collection<Cancha> lista = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			//stmt.setInt(1, co_Local);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancha vo = new Cancha();
				vo.setCo_Cancha(rs.getInt("co_Cancha"));
				vo.setNo_Canacha(rs.getString("no_Canacha"));
				//vo.setoLocal(rs.getoLocal)
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
}
